package com.pine.dbant.common.store;

import java.util.List;

/**
 * @author xiaoyuan
 * @create 2022/3/4
 **/
public interface CacheStore {

    int NO_EXPIRE = -1;

    long NOT_KEY = -2;

    /**
     * 设置key
     *
     * @param key    指定key
     * @param value
     * @param expire
     */
    void setValue(String key, Object value, long expire);

    /**
     * 设置key: 默认不过期
     *
     * @param key    指定key
     * @param value
     */
    default void setValue(String key, Object value){
        setValue(key,value,NO_EXPIRE);
    }

    /**
     * 更新数据，过期时间不变
     *
     * @param key
     * @param value
     */
    void updateValue(String key, Object value);

    /**
     * 设置过期时间
     *
     * @param key
     * @param expire
     */
    void setExpire(String key, long expire);

    /**
     * 获取指定key的value
     *
     * @param key
     * @return
     */
    <T> T getValue(String key);

    /**
     * 移除key对应的value
     *
     * @param key 指定key
     */
    void removeValue(String key);

    /**
     * 获取Value的剩余存活时间 (单位: 秒)
     *
     * @param key 指定key
     * @return 这个key的剩余存活时间
     */
    long getTimeout(String key);

    /**
     *  根据前缀key查询分页数据
     * @param <T>
     * @param prefKey
     * @param start -1表示查询全部
     * @param size
     * @return
     */
    List<String> queryPrefixKey(String prefKey, int start, int size);
}
